f507883cdad403f976446309a53626de1dee78ee,cdap-watchdog/src/main/java/co/cask/cdap/logging/write/LogLocation.java,LogLocation,readLogPrev,#Filter#number#number#,146
Before Change
logSegment = readToEndSyncPosition(dataFileReader, logFilter, fromTimeMs, -1);
if (!logSegment.isEmpty()) {
logSegments.add(logSegment);
count = count + logSegment.size();
}
After Change
*/
@SuppressWarnings("WeakerAccess")
public Collection<LogEvent> readLogPrev(Filter logFilter, long fromTimeMs, final int maxEvents) throws IOException {
Deque<Collection<LogEvent>> logSegments = new LinkedList<>();
int count = 0;
try {
try (DataFileReader<GenericRecord> dataFileReader = createReader()) {
if (!dataFileReader.hasNext()) {
return ImmutableList.of();
}
// Calculate skipLen based on fileLength
long length = location.length();
LOG.trace("File length {} {}", location, length);
long skipLen = length / 10;
if (skipLen > DEFAULT_SKIP_LEN || skipLen <= 0) {
skipLen = DEFAULT_SKIP_LEN;
}
// For open file, endPosition sync marker is unknown so start from file length and read up to the actual EOF
dataFileReader.sync(length);
long finalSync = dataFileReader.previousSync();
List<LogEvent> logSegment = readToEndSyncPosition(dataFileReader, logFilter, fromTimeMs, -1);
if (!logSegment.isEmpty()) {
logSegments.addFirst(logSegment);
count = count + logSegment.size();
}
LOG.trace("Read log events {} from position {}", count, finalSync);
long startPosition = finalSync;
long endPosition = startPosition;
long currentSync;
while (startPosition > 0 && count < maxEvents) {
// Skip to sync position less than current sync position
startPosition = skipToPosition(dataFileReader, startPosition, endPosition, skipLen);
currentSync = dataFileReader.previousSync();
logSegment = readToEndSyncPosition(dataFileReader, logFilter, fromTimeMs, endPosition);
if (!logSegment.isEmpty()) {
logSegments.addFirst(logSegment);
count = count + logSegment.size();
}
LOG.trace("Read log events {} from position {} to endPosition {}", count, currentSync, endPosition);